c语言指针赋值德问题

作者&投稿:衅都 (若有异议请与网页底部的电邮联系)
C语言指针的赋值问题~

指针在用要注意初始化,例如:
int *p;
p为指针,地址是未知的,如果直接赋值
*p=a;这样编译可以通过,但是会产生警告,p的地址是随机分配的,这样对未知的地址赋值很危险,可能会覆盖掉某些重要数据,所以避免这种危险,在定义指针时注意初始化,也就是赋值。
可以int *p=&a;
或者int *p;
p=&a;
然后再对p进行操作
有错。
注意大小写,还有
int a=9;
int *p;
p=&a;//这个是指针指向a
*p=8;
这样就对了。

扩展资料:指针的赋值
int *p;
int a;
int b[1];
p = &a;
p = b;
指针的赋值,“=”的左操作数能够是*p,也能够是p。
当“=”的左操作数是*p时,改变的是p所指向的地址存放的数据;
当“=”的左操作数是p时,改变的是p所指向的地址。
数组的变量名b表示该数组的首地址,因此p=b;也是正确的
同类型的指针赋值:
int val1 = 18,val2 = 19;
int *p1,*p2;
p1 = &val1;
p2 = &val2;
p1 = p2; //注意啦,p1指向了val2,而没有指向val1
备注:字符串与指针的初始化和赋值
初始化:
char *cp = "abcdefg"; //这个初始化过程,是将指针cp指向字符串的首地址,而并非传递字符串的值。由于,在C语言里面,没有总体处理一个字符串的机制
赋值:
cp = "abcdefg";
*cp=”abcdefg” ;//错误!字符串常量传递的是它的首地址,不能够通过*cp改动该字符串的值,由于该字符串为常量,而它仅仅是简单的将指针指向该字符串常量。

请分清“指针本身的值”和“指针指向的地址中的值”这两者的区别。指针本身的值就是地址。
int a = 2;int *p = &a;//p = 100; //试图将指针本身的值修改为100,即令指针p指向内存地址100的位置,这是未定义行为*p = 100; //将指针p指向的地址中的值修改为100,即将a的值修改为100

请注意,函数的参数变量,是函数在执行时刻临时申请的变量,这与在函数体中申请的临时变量一样,函数运行中可用,但函数执行return后将会被舍弃。函数调用inv(a,10,&max,&min);就是将数组a的首地址取出来赋值给临时变量x,10赋值给n,(主程序中的变量)max的地址赋值给(参数临时变量)max,(主程序中的变量)min的地址赋值给(参数临时变量)min。

由于参数的临时性,去直接修改参数变量的值,无法实现将修改后的值返回给调用者,只能利用指针型变量的特点来实现:将它指向的变量(这个被指向的变量可以是调用者的变量)的值进行修改,相当于我们改变的是门牌号中的住户而非去修改门牌号。

另外:*max=x; 是将x的值取出赋值给max指向的变量,这个指向的变量是main函数中的max,而max=x;是将x的值取出赋值给临时变量max,本来max中存放的是主函数中max变量的地址,因此这个地址会被x的值冲掉,关键你的本意并不是这样的。



在子函数中: max和min是指针变量, x[0]是int变量, 你把int变量赋值给指针变量, 单从类型上来说就不正确

max和min所指向的内存单元才可以看作是一个int变量, 获取这个所指向的内存单元, 形式为*max 或 *min



以上代码中,inv函数的形参max和min是整型指针变量,也就是说max和min中记录的是内存地址值;
max=x或min=x都是修改内存地址值,并没有对地址下存储内容进行修改,也就是说,用max=x和min=x不能对main函数中max和min变量的内容进行修改,max和min未经赋值,输出就是乱码。

min,max是参数,是指向int型的指针(指向main函数中的min,max变量),是栈上的临时变量,
min=x,max=x是将临时变量min和max指向一维数组,这时操作*max或者*min是实际操作的是一维数组的第一个元素。
而main中的min,max由于没有初始化,为了性能考虑保留了改地址以前的值,所以看起来像乱码

因为类型不匹配。形参表中规定,max 和 min 都是int * 类型的。所以,要保存x的值,就必须用*max=x;


c语言指针赋值德问题
函数调用inv(a,10,&max,&min);就是将数组a的首地址取出来赋值给临时变量x,10赋值给n,(主程序中的变量)max的地址赋值给(参数临时变量)max,(主程序中的变量)min的地址赋值给(参数临时变量)min。由于参数的临时性,去直接修改参数变量的值,无法实现将修改后的值返回给调用者,只能利用指针型变量...

C语言指针问题
1、ptr赋值为arr地址后指向第一个元素,即元素6.2、*(ptr++) += 123;由于是右侧操作(递增后缀),所以先取ptr地址后再递增ptr,此时取得的地址还是第一个元素地址(递增后ptr指向第二个元素,也就是7,这是第一次递增),因此是对6+123=129,并保存原地址,即第一个元素地址,因此6被改为129...

C语言中指针是否能够直接赋值,为什么?
D是对的 c和指针(《pointers on c》) 8.1.11 一个字符串,如"hello",一般为字符串常量,可以用它对字符指针赋值,或初始化,相当于把这个字符串常量的首地址赋给这个指针,如:char *p = "hello";或者 char *p;p="hello";但是,当用"hello"给字符数组作初始化时,"hello",并非...

关于c语言指针赋值的问题!
int a=3,b=4,*x,*y;x=&a;y=&b;\/\/&a、&b分别取变量a、b的地址,然后给指针变量x、y赋值。这时x指向a(x存储的a的地址),y指向b。通过*x即可访问a(*x和a等效),此时*x和a都代表同一个存储位置。因此你最后的写法是正确的。切记,在间接访问指针之前,要确保指针指向一个明确的...

为什么c语言中* p= a是指针赋值?
c语言中*p=a是指针变量赋值语句,这种写法有两种可能意思:1.指针变量定义时的初始化赋值 int a[10];int *p=a ; \/\/这时的a是个地址,如:数组名或指针变量,表示定义指针变量p,同时,p指向地址a。 这里的*是跟随int的,用来表示p变量是int *类型。2.指针变量定义后,给指针变量所指内存中的...

C语言 数组指针赋值出错
*型指针。所以数组里存放的是“指针”,只是个4字节变量,它还没有指向,就不能用string[i][j]='\\0';这种办法给它的指向目标赋值。要么直接把char *string[20];改成char string[20][100];(可以存放20个长99的字符串),要么在char *string[20];后用malloc等函数分别为20个指针分配空间。

C语言中字符串是怎么赋值的?
在C语言中,字符串的赋值主要有两种方法,第一种是通过指针的方式直接赋值,第二种是通过数组直接赋值。1、指针式赋值。通过程序的运行情况,可以知道:char *p = "hello";这种字符串的赋值方式是完全没有问题的。要理解这种赋值方式,首先得理解双引号(特别注意:这个是双引号,不要赋值的时候给弄了...

关于指针赋值问题
你犯了几个错误:1)*rep++=*p++;p指针在变,你的for还用strlen(p)做循环条件。p每增一次,strlen(p)少1,所以循环的次数肯定不对。对策:增加临时变量保存strlen(p)2)*rep++=*p++;你想用rep来存字符串,但是你不停的改变rep的地址值,就算你正确的将p字符串存入rep。当for循环结束时,...

请教C语言中字符指针和字符数组赋值的问题。
回答:原因很简单 =你用了 malloc函数来分配地址空间给指针p1so 自然是不能用初始化语句*p1 = "abcd";的只是malloc函数分配制定地址,malloc函数不允许直接赋值

关于C语言中指针赋值的问题
*p=a则把地址00000ff0的值变为a的值,显然如果该地址目前正在被某个进程使用,就有可能破坏该进程,因此这种方法是十分危险的。给指针赋值一般有两种方法,一种是将已经存在的变量的地址传递给指针,格式为:p=&a;另一种是首先为指针申请指向的合法内存,C语言中用函数malloc(),然后给已申请的...

白朗县15534982851: C语言指针的赋值问题 -
钞项双唑: 指针在用要注意初始化,例如: int *p; p为指针,地址是未知的,如果直接赋值 *p=a;这样编译可以通过,但是会产生警告,p的地址是随机分配的,这样对未知的地址赋值很危险,可能会覆盖掉某些重要数据,所以避免这种危险,在定义指针...

白朗县15534982851: 关于C语言中指针赋值的问题 -
钞项双唑: 你这样想说明你还没有真正理解内存和指针.int a;表示编译器随机取出一个空闲的地址分配给a,不妨设为00000000,长度为sizeof(int),不同编译器可能不同.int *p;也表示随机取出一个空闲的地址分配给p,不妨设为000000f0,长度一般为...

白朗县15534982851: 关于c语言指针赋值的问题! -
钞项双唑: int a=3,b=4,*x,*y;*x=a;*y=b; 指针变量x,y没有初始化,变量里存储的是不确定的值(垃圾值),间接访问一个不确定的内存位置是非法的.所以“*x=a;*y=b;”非法.“*x=&a;*y=&b;”同样也是,这里暂时不管赋值号"="两边的类型是否兼容.int a=3,b=4,*x,*y;x=&a;y=&b;//&a、&b分别取变量a、b的地址,然后给指针变量x、y赋值.这时x指向a(x存储的a的地址),y指向b.通过*x即可访问a(*x和a等效),此时*x和a都代表同一个存储位置.因此你最后的写法是正确的.切记,在间接访问指针之前,要确保指针指向一个明确的内存位置.

白朗县15534982851: C语言中指针赋值的问题 -
钞项双唑: P是一个指针,顾名思义,它代表的内存中的地址.而 * 操作符则表示该地址所存储的东西.比如说,你有一个仓库,P就是告诉你这个仓库在哪,*P 告诉你的是这个仓库里面有什么. 因此,1. *P = a 表示,你把 int 型的变量 a放到这个仓库里,是赋值操作; 2. & 是取地址,&a就是获取a的地址,*P = &a,就是将 a 的地址放到这个仓库; 3. P = & a,P本身就代表地址指向,所以这里是把a 的地址赋给P,就是将P指向了a.

白朗县15534982851: C语言中,数组指针的赋值问题,有一个指针p,指向一个m*n的二维数组, 我需要把这个数组的每一个 -
钞项双唑: int i, j; for(i=0; i<m; i++) for(j=0; j<n; j++) p[i][j] = 1;

白朗县15534982851: C语言 指针赋值问题 -
钞项双唑: 呵呵,p2是个二重指针,这个二重指针指向了p1这个一维指针的地址.对应类型是匹配的.

白朗县15534982851: C语言指针赋值问题 -
钞项双唑: 1:定义指针的时候 用 int* p=&a; 表示定义了一个整形指针P p指向a的地址 则*p就是 变量a了2:定义指针的时候只用int *p; 则可用 p=&a语句来取a的地址你说的就是定义指针时 给其赋值不赋值 若赋值则用1 不赋值则用2

白朗县15534982851: C语言指针赋初值问题 -
钞项双唑: int *p1=0,*p2=0,*p3=0;这里赋的是地址,指针都指向地址为0的空间就是空指针,没有实体存在,所以后便全错了. #include#include void main() { int *p1=(int *)malloc(sizeof(int)),*p2=(int *)malloc(sizeof(int)),*p3=(int *)malloc(sizeof(int)),*c; *p1=0...

白朗县15534982851: 关于c语言指针赋值的问题!
钞项双唑: &amp;是一元运算,取变量地址的操作,间接访问操作用运算符号*.&amp;他返回操作数的内存地址,可以赋给类型合适的指针./ 列如int x int *px px=&amp;x 将X的内存地址赋给指针变量px,该赋值语句表示 指针px制向变量X, *运算符与&运算符刚好相反,它也是一远运算符.用语返回指针指向的内存地址中存的值!

白朗县15534982851: C语言指针赋值问题
钞项双唑: 是D p是指针变量 需要赋地址 n是整数 故不能赋给p

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网