当前位置:首页 » 编程语言 » c语言创建指针
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言创建指针

发布时间: 2023-05-24 19:48:28

1. c语言中怎么定义一个字符串数组指针

c语言中定义一个字符串数组指针可以这样写:


//Exampleprogram
#include<stdio.h>

intmain()
{
蚂慎罩charstr[]="abc";
闷闹char*p=str;
printf("%s ",str);
printf("%s "孝旁,p);
return0;
}

2. c语言中怎样定义文件指针

FILE
*fp
这就是
文件指针
定义方式啊
还问
文件指针怎么定义?
你是想知道FILE是什么吧?
它是一个
结构体

struct
_iobuf
{
char
*_ptr;
int
_cnt;
char
*_base;
int
_flag;
int
_file;
int
_charbuf;
int
_bufsiz;
char
*_tmpfname;
};
typedef
struct
_iobuf
FILE;

3. 在C语言中,创建一个指针变量,但是不赋值,是否就是空指针

对于未初始化的变量,编译器会给它们一个默认值,这个默认值是未知的(也许是NULL,也许是其他的),任何使用未初始化的变量的行为都是有隐患的。

4. c语言,在函数中创建的指针,在其他函数中能直接调用吗

能啊,在参数里调用指针其实只是用的只是地渣闭侍址如吵,下面的程序就是调用态租数组a的首地址。
int reform(int *q,int n)
{....}
main()
{
int a[10],*p;
p=a;
reform(p,10);
}

5. C语言中,如何定义一个‘指针数组’,这个‘指针数组’专门用来存放‘数组指针’。

指针数组定义int*p[n];

[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,

这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样*p=a;这里*p表示指针数组第一个元素的值,a的首地址的值。

数组指针定义int(*p)[n];

()优先级高,首先说明p是一个指历亮针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。

如要将二维数组赋给一指针,应这样赋值:

int a[3][4];

int(*p)[4];//该语句是定义一个数组指针,指向含4个元素的一维数组。

p=a;//将该二维数肢吵宽组的首地址赋给p,也就是a[0]或&a[0][0]

p++;//该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]

(5)c语言创建指针扩展阅读:

与数组指针关系

数组指针是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动);指针数组是数组元素为指针的数组,其本质为数组。

例如:*p[2]是指针数组,实质是一个数组,里面的两个元素都是指针,[]的优先级比*的优先级高,p先与[]结合,形成数组p[2],有两个元素的数组,再与*结合,表示此数组是指针类型的,每个数组元素相当于一个指针变量

与二维数组对比

二维数组:如char string_1[10][10]只要定义了一个二维数组,无论赋不赋值,系统都会给他分配相应空间,而且该空间一定是连续的。其每个元素表示一个字符。我们可以通过指定下标对其元素进行修改。

指针数组:如char*str_B[5]系统至少会分配5个连续的空间用来存储5个元素,表示str_B是一个5个元素的数组,每个元素是一个指向字符型数据的一个指针。

如果我做这样的定义:

char a[3][8]={"gain","much","strong"};

char*n[3]={"gain","much","strong"};

他们在内存的存储方式分别如右图所示,可见,系统给数组a分配了

3×8的空间,而给n分配的空间则取决于具体字符串的长度。

此外,系统分配给a的空间是连续的,而给n分配的空间则不一定连续。

由此可见,相比于比二维字符数组,指针数组有明显的优点:一是指针数组中每个元素所指的字符串不必限制在相同的字符长度;二是访问指针数组中的一个元素是用指针间接进行的,效率比下标方式要高。但是二维字符数组却可以通过下标很方便的修改某一元素的值,而指针数组却无法这么做。

举例编辑

数组指针:

#include&lt;stdio.h&gt;

int main()

{

char c[][4]={"哥","哥","我","岸","上","走"};//UTF-8:一个汉字=3个字节

char(*p)[4];

int i;p=c;//将指针定位于c[0]

for(i=0;i&lt;=5;i++)

{

printf("%s,",*(p+i));//或碰告者将*(p+i)替换成*p++

}

printf(" ");

for(i=5;i&gt;=0;i--)

{

printf("%s,",*(p+i));//或者将*(p+i)替换成*--p

}

return 0;

}

指针数组:

#include&lt;stdio.h&gt;

int main()

{

int i;

char*pch[6]={"妹","妹","你","坐","船","头"};

for(i=0;i&lt;6;i++){

printf("%s,",pch&lt;i&gt;);

}

printf(" ");

for(i=5;i&gt;=0;i--){

printf("%s ",pch&lt;i&gt;);

}

return 0;

}

6. C语言编如何写指针函数

1
#include<iostream>
using namespace;
void main()
{
int a=0,b=0;
int *s=a;int *p=b;
cout<<“please the two numbers”;
cin>>a;
cin>>b;
int fun(int *a,int *b)
{
if(*a==*b)
{
cout<<"different\n";return 1;
else cout<<"same\n"; return 0;
}
fun(s,p);
}

include<iostream>
using namespace std;
void main()
{
int a[10]={0};
int i=0,j=0,k=0,p=0,m=0;
int *x=a;int *n=a;
for(;i<=9;++i)
{
cout<<"input the "<<i+1<<"number(s)";
cin>>a[i];
}
int fun(int *a)
{
for(;*x!=null;++x)
for(;m<=9;++m)
{
if(*x<a[m]) break;
n=x;
}
cout<<"the max is"<<*n;
}

7. C语言 程序编程 指针

指针也是一个变量,它也需要进行赋值。指针所存储的东西不是什么特别的,犹如普通的整型变量int x ,x可以存放一个整数一样, 那int *p 的p则可以存放一个内存地址。所以指针变量中所存放的内容就是一个内存地址。
所以经常的做法是将一个“地址”赋值给一个指针变量,那如何取到一个地址呢,C语言中就提供了一个运算符&, 称该运算符为取地址运算符,它可以获得一个变量的地址,如int x; 那么&x就是变量x所在内存单元的地址了。这样你可以把它赋给一个指针变量即 p = &x; 我们形象的说p指向x,其实就是p的内存单元中存放了变量x的地址。
通过上述的赋值给对于x这个内存单元我就可以有两种访问方法,也就是说我有两种方式使用x
第一种直接法,就是x, 比如我要更改x变量的值,就是更改x所在内存单元中存放的数据,
x=5,就是把5存放到悉喊x所在内存单元。这是很显然的方式。
第二种间接法,由于之前已经让一个指针变量p指向的x即p= &x了,所以我可以通过p间接的访问x,怎么访问呢? 这里C语言又提供了一个运算符*, 你肯定不陌生,它就是乘号啊, 没错它是乘号,但这里它有另一个作用就是“间接访问”芹塌,通过*运算符我们可以间接访问x这个内存单元。
你可能已经清楚点了就是*p 就是说*p的值就是x, x的值就是*p, 所以这里容易产生一种概念
*p==x 有这个表达式存在且为真。 没错它确实为真。
但是错误就容易从这里产生了,因为*p==x,容易产生这种想法,那么我把x赋值给*p, 即*p=x会有错吗? 理解方式就是*p即然代表了一个值,它在此处就是x, 那我要改变*p的值, 用*p=x 这没有问题吧? 肯定有, 这里*的作用一定搞清是“间接访问”, 间接访问的话首先它就得有一个指向的对象,也就是说必须有p=&x的前提,有可能有*p=x, 无此前提的话真接使用*p就是空谈,因为指针变量p是存在,但是p中存放的内容是什么并不确定,它并没有存x的地址啊,程序也不会那么聪明的你这里睁首野定义了x它就指向x去。所以这种想法是错的
分清*这个运算符三个作用:
1 乘号, 比如a*b表示a乘以b,是数学运算
2 指针定义标志, 比如我要定义一个指针变量有int* p; 这是定义时标志它是一个指针变量
3 间接访问, 用于指针间接访问它所指向的内存单元 如int *p,x; p=&x; 则可*p=5;这样使用

8. C语言如何创建三级指针

二级指针是int**,相对地庆雹轮,誉信三级肆尺指针是int***
int(*)[2]这属于数组指针,而不是二级指针。

9. 初学者编程入门:C语言指针使用方法

为初学者服务。这是本文的宗旨。指针是c和c++中的难点和重点。有些程序员们精通dos下的basic。c语言的其它各种特性,在basic中都有类似的东西。只有指针,是sc所不具备的。指针是c的灵魂。

我不想重复大多数书上说得很清楚的东西,我只是把我看过的书中说得不清楚或没有说,而我又觉得我理解得有点道理的东西写出来。

1、指针的概念

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。

先声明几个指针放着做例子:

例一:

(1)int*ptr;
(2)char*ptr;
(3)int**ptr;
(4)int(*ptr)[3];
(5)int*(*ptr)[4];

1、指针的类型

从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:

(1)int*ptr;
//指针的类型是int*
(2)char*ptr;
//指针的类型是char*
(3)int**ptr;
//指针的类型是int**
(4)int(*ptr)[3];
//指针的类型是int(*)[3]
(5)int*(*ptr)[4];
//指针的类型是int*(*)[4]

怎么样?找出指针的类型的方法是不是很简单?

2、指针所指向的类型

当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。

从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例配模凳如:

(1)int*ptr;
//指针所指向的类型是int
(2)char*ptr;
//指针所指向的的类型是char
(3)int**ptr;
//指针所指向的的类型是int*
(4)int(*ptr)[3];
//指针所指向的的类型是int()[3]
(5)int*(*ptr)[4];
//指针所指向的的类型是int*()[4]

在指针的算术运算中,指针所指向的类型有很大的作用。指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越来越熟悉时,你会发现,把与指针搅和在一起的"类型"这个概念分成"指针的类型"和"指针所指向的类型"两个概念,是精通指针的关键点之一。

3、指针的值,或者叫指针所指向的内存区或地址

指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32位程序里,所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。

指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。以后,我们说一个指培旅针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。

指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例一中,码明指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向的内存区是不存在的,或者说是无意义的。

以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指向的类型是什么?该指针指向了哪里?

4、指针本身所占据的内存区

指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测一下就知道了。在32位平台里,指针本身占据了4个字节的长度。指针本身占据的内存这个概念在判断一个指针表达式是否是左值时很有用。

10. C语言中如何定义一个行指针

int *arry[10]; //指针数组
int (*arryp)[10]; //数组指针,因为数组指针指向数组,而数组也可看做是个指针,那数组指针可以理解为一个二 级指针
int a[10];
arryp = &a; //将数组地址个数组指针
arry[0] = *arryp; //arry[0]是一级指针,要将数组指针赋给指针数组,就要取内容,实际就是 arry[0] = a;