1.字符指针的初始化

在c语言中 "string"保存的就是首个字符所在的地址  所以可以把 字符串常量"string" 赋值给指针 char *p;

char *s ="123456";

p="string"  但不能把字符串常量直接赋给数组,

char ch1[10];
ch1="123456";

需要用到 strcpy。

strcpy_s(ch1,"123456");//VS2012用strcpy_s才过,是strcpy的安全版本

但可以对数组初始化为字符串,也就是字符数组。如  char str[] = "string";

两种初始化的区别:

char * p="the fine day" ;
char str[]="the fine day"

不同, 这两个都是给字符串的初始化,前者只是把字符串的首地址给str,没有分配足够的内存地址来保存整个字符串 , 后者初始化的同时,把他们保存在数组中,也就是分配好了所有字符需要的内存。 所以:

(1)  char *p = "string";    // 地址变量p 保存的是 's' 的地址,,
(2)  char str[] = "the fine day";    //字符数组str保存的是整个字符串,某些情况下退化为指针
(3)  char *str1 = "the day";  // OK.

此时,如果要复制另一个字符串str1 到p或str:

strcpy(p, str1);    //错误!   需改为  p=(char*)malloc( strlen(str1)+1 );  才正确
strcpy(str, str1);    //没错误,已有足够内存,但不能总是保证。
strncpy(str, str1, strlen(str) );    //正确!不作讨论

实际上,(1)中是不对的,好像新标准已经会报错;
通常应该这样初始化:strcpy(p, "string");
或者改为:const *p = ""string";  但这样就不能修改p了。

针对这个分配的内存空间可能不足导致溢出的不安全问题,已经出了一个新的版本strcpy_s。具体参考其他日志。

另外补充一点,这样初始化时错误的

char *p ='a';//指针只能保存地址,不是保存值(字符a)

2.整形指针的初始化

试看下面语句哪一行 能够 打印输出?

int a = 10;
int * p1 = 0;
int * p2 = &a;  //常见,初始化为某变量的地址
int * p3 = 20;
printf("p1=%p, *p1=%d\n", p1, *p1);
printf("p2=%p, *p2=%d\n", p2, *p2);
printf("p3=%p, *p3=%d\n", p3, *p3);

这几行语句编译时会有警告:p3那一行将整数赋值给指针,没做类型转换。
运行时会导致崩溃。
为什么呢?

仔细看一下,int * p1 = 0;     //真的初始化了吗?
                     int * p3 = 20;    // *p3 初始化成20了吗?
其实int *p1 = 0 相当于 int *p1 = NULL,不能读取空指针 p1 以及 *p1 的值!,编译不会报错,但是运行时会报异常。
而 int *p3 = 20 相当于 int *p3;   p3 = (int *)0x00000014; 不能读取*p3的值。

转载于:https://www.cnblogs.com/VIPler/p/4319313.html

C++指针初始化总结相关推荐

  1. c语言+结构体指针初始化,c语言结构体指针初始化===

    c语言结构体指针初始化 今天来讨论一下C中的内存管理. 记得上周在饭桌上和同事讨论C语言的崛起时,讲到了内存管理方面 我说所有指针使用前都必须初始化,结构体中的成员指针也是一样 有人反驳说,不是吧,以 ...

  2. C语言中指针初始化和常规运算

    1. 指针初始化注意须知 <1>指针变量和普通变量一样,外部或者静态指针变量若未初始化,则被自动初始化为NULL,它的值为0(ASCII字符NULL的代码). <2>可以用已初 ...

  3. C 结构体指针初始化

    原文 C 结构体指针初始化,CSDN同步发布. 转载请注明出处,谢谢! 在使用指针之前,务必要将其初始化.这是我们最早学习 C 语言的时候,书上经常说的一个问题.在工作中,我们反而会经常忘记这条金科玉 ...

  4. C++中的指针初始化

    C++中定义一个指针的时候,例如 int *p. 可以认为定义了两个内容,1:指针,2:指针的指向.需要对指针本身和指针的指向都进行初始化,既要初始化内存地址,也要定义内存中的内容.如果不进行指针的初 ...

  5. C语言双重指针初始化

    /* 双重指针初始化 */#include <stdio.h> #include <stdlib.h> #include <malloc.h>int main() ...

  6. C语言指针初始化(malloc)

    指针初始化问题: 代码: // point.cpp :malloc的初始化问题 // /** * 2019.03.20 * 记录malloc的初始化问题,在其它函数中初始化,和赋值 * By: 冬天D ...

  7. C++指针详解(指针初始化与回收,常量与指针,引用与指针)

    C++指针详解 1.指针的定义初始化以及回收 2.常量与指针 1)常量指针(常指针) 2)指针常量 3)总结 3.引用与指针 1.指针的定义初始化以及回收 指针是一个地址,这个地址内存放数据,这些数据 ...

  8. C++类中指针初始化注意问题

    C++类中指针初始化注意问题 首先了解一下编译器自动生成的赋值函数和operator =函数, 如果你成员变量没有指针那么没什么问题,自带的copy函数会逐bits 的copy,但是如果你类中定义了指 ...

  9. C语言 数组指针初始化

    char m[3][4]: m[3][4]={"asd","fgh","jkl"}; 当然不行,不管从初始化器,还是从原理上来讲都不正确,首 ...

最新文章

  1. Kubernetes源码阅读笔记——Controller Manager(之三)
  2. IIS的真正并发数及扩展并发的办法
  3. 微信支付成功但是微信分享却失败了
  4. 本地CDI限定词:@Any和@Default
  5. 如何将列表分成大小均匀的块?
  6. 电脑usb安装win11失败,如何给电脑安装win11系统
  7. Vivado exception_access_violation
  8. java获取连接池方式_java – 如何测试连接池
  9. 游戏充值平台系统PHP,游戏支付平台源码+游戏充值平台+第3方支付平台源码+游戏网关支付接口...
  10. java batik 字体文件_java使用batik转换svg文件-Go语言中文社区
  11. MT6763/P23处理器资料介绍
  12. linux下载jdk
  13. 优化 Laravel 网站打开速度9条
  14. (openCV 十二)图像增强(对数变换/伽马变换/分段线性变换)
  15. 零基础小白必须学习的,3Dmax快捷键大全!你都会吗?
  16. 设置计算机系统语言,windows系统默认语言如何设置-windows系统默认语言设置方法 - 河东软件园...
  17. ES06# Filebeat采集原理与监控指标梳理
  18. Linux文本比较指令(diff,cmp)详解
  19. lzma算法_十款性能最佳的压缩算法
  20. C++里面头文件和源文件都要怎么编写以及运行

热门文章

  1. 入门十大Python机器学习算法(附代码)
  2. tensorflow学习入门笔记
  3. oracle xmltype转字节,extractvalue处理XMLTYPE类型超过4000字节ORA-01706的解决方法
  4. linux编译两个整数相加,常考面试题之两个字符串相加(长整数相加)
  5. eclipse没有日志_IPFS技术最新进展:抵抗eclipse攻击的能力
  6. python 高并发 select socket_socket + select 完成伪并发操作的实例
  7. Java基础:继承、多态、抽象、接口
  8. 论文目录用word怎么自动生成或插入?
  9. 没有会员wps合并多个sheet_WPS「合并文档」功能,如何“唰”一下把多个文档合并到一起?...
  10. 深入理解JVM虚拟机(十):Java内存模型与多线程